﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmFinalizarPagamento : Form
    {

        #region Variaveis
        DataTable dataTableGridView = new DataTable();
        List<DTOPagamento> ListPagamento = new List<DTOPagamento>();
        double[] ValoresParcelados;
        int[] IndicesPagamentos;
        DTOCliente dtoCliente = new DTOCliente();
        DTOOrdemPendente dtoOrdemPendente = new DTOOrdemPendente();
        DTOPagamento dtoPagamento = new DTOPagamento();
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();
        private double ValorVenda;

        BLLPagamento bllPagamento = new BLLPagamento();
        BLLCor bllCor = new BLLCor();
        
        
        

        #endregion

        public frmFinalizarPagamento(DTOOrdemPendente dtoOrdemPendente, double Valor)
        {
            InitializeComponent();
            ValorVenda = Valor;
            this.dtoOrdemPendente = dtoOrdemPendente;
            txtTotal.Text = string.Format("R$ {0:0.00}", Valor);
            ListarComboPagamento();
            SetColors();
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");

            tlpVeiculo.BackColor = btnCancelar.BackColor = btnFinalizar.BackColor = toolStripButtonSair.BackColor =
            tlpCrud.BackColor = tlpMenuStripLeft.BackColor = tlpMenuStripRigth.BackColor = tlpMenuStripCenter.BackColor
              = dtoCorPrincipal.Cor;

            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpPrincipal.BackColor = tlpMenuStrip.BackColor = dtoCorFundo.Cor;


            dtoCorLetra = bllCor.Buscar("Letra");
            label2.ForeColor = label3.ForeColor = gpbvenda.ForeColor = label1.ForeColor =
                label4.ForeColor = label5.ForeColor = label21.ForeColor = btnFinalizar.ForeColor =
                btnCancelar.ForeColor = dtoCorLetra.Cor;


        }

        private void ListarComboPagamento()
        {
            ListPagamento = bllPagamento.BuscarPagamentosCadastrados();
            cmbPagamento.Items.Clear();
                IndicesPagamentos = new int[ListPagamento.Count];
            for (int i = 0; i < ListPagamento.Count; i++)
            {
              
                cmbPagamento.Items.Add(ListPagamento[i].Descricao);
            }
            if (cmbPagamento.Items.Count == 0)
            {
                if (new frmMessageBox().Show("Não existe nenhuma forma de pagamento cadastrada. \nDeseja cadastrar uma nova forma de pagamento?",
                    "Formas de Pagamento", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) == System.Windows.Forms.DialogResult.Yes)
                {
                    new frmFormaPagementoCadastro().ShowDialog();
                    ListarComboPagamento();
                }
            }
            else            cmbPagamento.SelectedIndex = 0;
        }

        private void ListarComboParcela()
        {
            cmbParcela.Items.Clear();
            int i = 0;
            double parcela = 0;
            double SaldoDevedor = ValorVenda;
            double totalDevedor;
            int nParcela;
            ValoresParcelados = new double[ListPagamento[cmbPagamento.SelectedIndex].NumeroMaxParcela];

            do
            {
                nParcela = 0;
                totalDevedor = 0;
                SaldoDevedor = ValorVenda;
                totalDevedor = 0;
                for (int j = 0; j < i + 1; j++)
                {
                    SaldoDevedor += (ListPagamento[cmbPagamento.SelectedIndex].Juros * SaldoDevedor / 100);
                    nParcela++;
                    totalDevedor += (SaldoDevedor / ((i + 2) - nParcela));
                    SaldoDevedor -= (SaldoDevedor / ((i + 2) - nParcela));
                }
                parcela = (totalDevedor / (i + 1));
                if (ValoresParcelados.Length > 0)
                    ValoresParcelados[i] = parcela;
                if (i == 0 || parcela > ListPagamento[cmbPagamento.SelectedIndex].ValorMinParcela)
                    cmbParcela.Items.Add(string.Format("{0:00} x - R$ {1:0.00} - ({2})", i + 1, parcela, cmbPagamento.SelectedItem));
                else
                    break;
                i++;
            } while (i < ListPagamento[cmbPagamento.SelectedIndex].NumeroMaxParcela);

            cmbParcela.SelectedIndex = 0;


        }

        private void cmbPagamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListarComboParcela();
        }

        private void cmbParcela_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ValoresParcelados.Length > 0)
            {
                txtTotal.Text = string.Format("R$ {0:0.00}", ValoresParcelados[cmbParcela.SelectedIndex] * (cmbParcela.SelectedIndex + 1));
            }
        }

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnFinalizar_Click(object sender, EventArgs e)
        {
            DTOOrdem dtoOrdem = new DTOOrdem();
            dtoOrdem.Vencimento = dtpVencimento.Value;
            dtoOrdem.NumeroParcela = Int32.Parse(cmbParcela.SelectedItem.ToString().Substring(0, 3));
            dtoOrdem.Valor = double.Parse(txtTotal.Text.Replace("R", "").Replace("$", ""));
            dtoOrdem.OrdemPendenteID = dtoOrdemPendente.OrdemPendenteID;
            dtoOrdem.VeiculoID = dtoOrdemPendente.VeiculoID;
            dtoOrdem.FormaPagamentoID =ListPagamento[cmbPagamento.SelectedIndex].PagamentoID;
            dtoOrdem.ClienteID = new BLLCliente().PesquisarDonoVeiculo(dtoOrdemPendente.VeiculoID).ClienteID;
            
            

            new BLLOrdem().Inserir(dtoOrdem);
            new BLLOrdemPendente().Excluir(dtoOrdemPendente.OrdemPendenteID);
            this.Close();
            new frmMessageBox().Show(string.Format("Seu pagamento foi Realizado com Sucesso!"),"Pagamento", MessageBoxButtons.OK, MessageBoxIcon.Information);
            BLLUtilitarios.PagamentoRealizado = true;
        }

    }
}
